package com.ruoyi.system.service;

import com.dtflys.forest.annotation.*;
import com.ruoyi.system.domain.Forest.second.*;
import com.ruoyi.system.interceptor.SecondTokenHeaderInterceptor;
import org.springframework.security.core.parameters.P;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@BaseRequest(
        baseURL = "${secondDomain}"     // 默认域名
        ,interceptor = SecondTokenHeaderInterceptor.class
)
public interface SecondDeviceAsyncClient {

    /**
     * 设备列表
     * @param page
     * @param size
     * @return
     */
    @Get("/v1/data/device/pages?sortProp=nodeId&sortOrder=0")
    BaseResult<PageResult<DeviceListResult>> getDeviceList(@Query("page") int page,
                                                           @Query("pageSize") int size);

    /**
     * 查询设备

     * @return
     */
    @Get("/v1/data/device/pages?sortProp=nodeId&sortOrder=0&page=1&pageSize=1")
    BaseResult<PageResult<DeviceListResult>> getDeviceInfo(@Query("nodeId") String nodeId);
    /**
     * 获取设备数据
     * @param nodeId
     * @return
     */
    @Get("/v1/data/meter/realtime?sortProp=timeUpload&sortOrder=0&page=1&pageSize=1")
    BaseResult<PageResult<DeviceDataResult>> getDeviceData(@Query("nodeId") String nodeId);

    /**
     * 批量读取阀门数据，单次50条内
     */
    @Post("/v1/data/Vx/readStatusSync")
    BaseResult<List<ValueResult>> readStatusSync(@JSONBody("DeviceCodes") List<String> nodeIds);

    /**
     * 批量一键开关阀，seqNo—0关，1开
     */
    @Post("/v1/data/Vx/selfLockMany")
    BaseResult<List<String>> selfLockMany(@JSONBody("LockParams") List<LockParam> nodeIds);


    /**
     * 批量设置阀门工作模式 132 是流量平衡模式，131 室温模式，130 回水模式，129 通断模式
     */
    @Post("/v1/data/Vx/setWorkModeBatch")
    BaseResult<List<String>> setWorkModeBatch(@JSONBody("params") List<WorkModeParam> nodeIds);


    /**
     * 批量设置温控器锁定 1 是开锁定，0 是关锁定
     */
    @Post("/v1/data/Vx/setPanelLockTempBatch")
    BaseResult<List<String>> setPanelLockTempBatch(@JSONBody("params") List<LockStateParam> nodeIds);


    /**
     * 批量设置温控器温度
     */
    @Post("/v1/data/Vx/setPanelSettingTempBatch")
    BaseResult<List<String>> setPanelSettingTempBatch(@JSONBody("params") List<SettingTempParam> nodeIds);

    /**
     * 设置开度
     */
    @Post("/v1/control/valve/setOpening")
    BaseResult<SetResult> setOpening(@JSONBody("msgId") Long msgId,
                                     @JSONBody("nodeId") String nodeId,
                                     @JSONBody("opening") Integer opening,
                                     @JSONBody("expiredDate") String expiredDate);

    /**
     * 设置工作模式
     */
    @Post("/v1/control/valve/setWorkMode")
    BaseResult<SetResult> setWorkMode(@JSONBody("msgId") Long msgId,
                                      @JSONBody("nodeId") String nodeId,
                                      @JSONBody("mode") String workMode,
                                      @JSONBody("expiredDate") String expiredDate);
    /**
     * 设置锁定温度 1 是开锁定，0 是关锁定
     */
    @Post("/v1/control/valve/selfLockTemp")
    BaseResult<SetResult> setLockTemp(@JSONBody("msgId") Long msgId,
                                      @JSONBody("nodeId") String nodeId,
                                      @JSONBody("seqNo") int seqNo,
                                      @JSONBody("expiredDate") String expiredDate);
    /**
     * 温度设置
     */
    @Post("/v1/control/valve/setRoomTemp")
    BaseResult<SetResult> setRoomTemp(@JSONBody("msgId") Long msgId,
                                      @JSONBody("nodeId") String nodeId,
                                      @JSONBody("settingTemp") BigDecimal temp,
                                      @JSONBody("roomTemp") BigDecimal roomTemp,
                                      @JSONBody("expiredDate") String expiredDate);

    /**
     * 回水温度设置
     */
    @Post("/v1/control/valve/setReturnTemp")
    BaseResult<SetResult> setReturnTemp(@JSONBody("msgId") Long msgId,
                                      @JSONBody("nodeId") String nodeId,
                                      @JSONBody("temp") BigDecimal roomTemp,
                                      @JSONBody("expiredDate") String expiredDate);
    /**
     * 获取阀门状态
     */
    @Post("/v1/control/valve/getStatus")
    BaseResult<Map<String, Object>> getStatus(@JSONBody("msgId") Long msgId,
                                              @JSONBody("nodeId") String nodeId,
                                              @JSONBody("expiredDate") String expiredDate);

    /**
     * 读取阀门设置状态
     */
    @Post("/v1/control/valve/getStatusResult")
    BaseResult<Map<String, Object>> getStatusResult(@JSONBody("msgId") Long msgId,
                                                     @JSONBody("nodeId") String nodeId,
                                                     @JSONBody("expiredDate") String expiredDate);


}
